/**
 * 日志打印模块
 */
const LEVEL_MAP = ['DEBUG', 'INFO', 'WARNING', 'ERROR'];

/**
 * 日志打印对象，目前支持最多打印10个参数，超过10个参数则不进行打印，使用的是arguments[0]至arguments[9]的方式打印10个参数
 * 注：为了能正确接受调用处传入的参数（使用arguments对象接受参数），所有方法一定不能使用箭头函数的写法，一定要使用function声明函数，不可使用箭头函数
 */
export default {
  /**
   * getLogStr 获取打印日志的时间戳字符串
   */
  getLogStr: () => {
    const now = new Date();
    let year = now.getFullYear();
    let month = now.getMonth() + 1;
    month = month < 10 ? ('0' + month) : month;
    let date = now.getDate();
    date = date < 10 ? ('0' + date) : date;
    let hour = now.getHours();
    hour = hour < 10 ? ('0' + hour) : hour;
    let minute = now.getMinutes();
    minute = minute < 10 ? ('0' + minute) : minute;
    let second = now.getSeconds();
    second = second < 10 ? ('0' + second) : second;
    let millisecond = now.getMilliseconds();
    millisecond = millisecond < 10 ? ('00' + millisecond) : (millisecond < 100 ? ('0' + millisecond) : millisecond);
    return `[${year}-${month}-${date} ${hour}:${minute}:${second}.${millisecond}]: `;
  },

  /**
   * debug 打印DEBUG级别日志，主要用于打印调测日志
   * @param {Object} arguments 待打印的日志参数
   */
  debug: function() {
    if (LEVEL_MAP.indexOf(window.systemConfig.LOG_LEVEL) <= LEVEL_MAP.indexOf('DEBUG')) {
      console.info('[DEBUG]' + this.getLogStr(), ...arguments);
    }
  },

  /**
   * info 打印INFO级别日志，主要用于打印参数，打印实体类等信息，如方法入口，方法出口等用于跟踪业务逻辑的信息
   * @param {Object} arguments 待打印的日志参数
   */
  info: function() {
    if (LEVEL_MAP.indexOf(window.systemConfig.LOG_LEVEL) <= LEVEL_MAP.indexOf('INFO')) {
      console.info('[INFO]' + this.getLogStr(), ...arguments);
    }
  },

  /**
   * warn 打印WARNING级别日志，主要用于打印告警信息，如某个页面需要展示某数据，但是数据为空，此时可以打印告警日志
   * @param {Object} arguments 待打印的日志参数
   */
  warn: function() {
    if (LEVEL_MAP.indexOf(window.systemConfig.LOG_LEVEL) <= LEVEL_MAP.indexOf('WARNING')) {
      console.warn('[WARNING]' + this.getLogStr(), ...arguments);
    }
  },

  /**
   * error 打印ERROR级别日志，当数据出现错误而影响基础功能时，打印错误日志。如新增功能必须要选择区域信息，但是区域信息为空，则打印错误日志提示
   * @param {Object} arguments 待打印的日志参数
   */
  error: function() {
    if (LEVEL_MAP.indexOf(window.systemConfig.LOG_LEVEL) <= LEVEL_MAP.indexOf('ERROR')) {
      console.error('[ERROR]' + this.getLogStr(), ...arguments);
    }
  }
}
